home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / os20 / wb / td.lha / td.e < prev    next >
Text File  |  1993-02-16  |  5KB  |  166 lines

  1. /* Td 1.0 is a minimal tools-demon far from being optimized - but it's my
  2. first program written in genious 'E' and works fine for me. You can call it
  3. by putting run <nil: >nil: Td in your startup-sequence (!) somewhere
  4. ***after*** loadwb or (prefered way) by dragging its icon into wbstartup.
  5. If you find (serious) bugs, mail them to arzheim@goofy.zdv.uni-mainz.de . If
  6. you don't like it get another prog and eat dirt.
  7. */
  8. MODULE 'workbench/workbench','WB'
  9. MODULE 'exec/ports'
  10. /*MODULE 'exec/nodes'*/
  11. MODULE 'dos/notify'
  12. OPT OSVERSION=37
  13.  
  14.  
  15.  
  16.   DEF myargs:PTR TO LONG,rdargs
  17.   DEF filename[80]:STRING
  18.   DEF myapp_port=NIL:PTR TO mp
  19.   DEF appmsg:PTR TO appmessage,fh=NIL
  20.   DEF lesestring[80]:STRING
  21.   DEF anzahl=0
  22.   DEF dummy=NIL
  23.   DEF i
  24.   DEF mymenarray[6]:ARRAY OF LONG
  25.   DEF commstrarr[5]:ARRAY OF LONG
  26.   DEF raus=NIL
  27.   DEF portsig=NIL
  28.   DEF nreq:PTR TO notifyrequest,sig,task,signal
  29.  
  30.  
  31.   PROC main()
  32.  
  33.   myargs:=[0,0]
  34.   FOR i:=0 TO 4 DO commstrarr[i]:=String(60)
  35.  
  36.   IF (commstrarr[0]=0) OR (commstrarr[1]=0) OR (commstrarr[2]=0) OR (commstrarr[3]=0) OR (commstrarr[4]=0)
  37.   WriteF('No memory for string-array!\n')
  38.   CleanUp(15)
  39.   ENDIF
  40.  
  41.  
  42.   IF rdargs:=ReadArgs('CF=CONFIGFILE,HELP/S',myargs,NIL)
  43.  
  44.      IF myargs[0]                              /*parse configfile*/
  45.         StrCopy(filename,myargs[0],ALL)
  46.      ELSE
  47.         StrCopy(filename,'s:Td.config',ALL)    /*Default-configfile*/
  48.      ENDIF
  49.  
  50.      FreeArgs(rdargs)
  51.  
  52.  
  53.      IF myargs[1] <> 0                     /*Info &exit*/
  54.         WriteF('\n Td - a minimal tools-demon for WB 2/3.x Tools-Menu\n\nCONFIGFILE may contain upto 5 command-lines of the form:\ntitle!command (as you would type it at the shell-prompt).\nSpecial feature: Td recognizes changes in CONFIGFILE while running and\nchanges menu.\n\nDefault CONFIGFILE is s:Td.config\n')
  55.         CleanUp(5)
  56.      ENDIF
  57.  
  58.      IF nreq:=New(SIZEOF notifyrequest)     /* memory is cleared */
  59.        sig:=AllocSignal(-1)                /* we want to be signalled */
  60.        IF sig=-1
  61.          WriteF('No signal!\n')
  62.          CleanUp(15)
  63.        ENDIF
  64.        IF myapp_port:=CreateMsgPort()             /*setup Port*/
  65.           task:=FindTask(0)
  66.           nreq.name:=filename
  67.           nreq.flags:=NRF_SEND_SIGNAL
  68.           nreq.port:=task                     /* union port/task */
  69.           nreq.signalnum:=sig                 /*prepare struc for notify */
  70.           portsig:=Or(Shl(1,myapp_port.sigbit),Shl(1,sig))  /*wait for two signals*/
  71.           IF workbenchbase:=OpenLibrary('workbench.library',37)
  72.             menuadd()
  73.             StartNotify(nreq)
  74.  
  75.             REPEAT
  76.               signal:=Wait(portsig)
  77.               /*WriteF('\d\n',signal)*/
  78.               IF signal = Shl(1,myapp_port.sigbit) /*app-menu-message*/
  79.                 appmsg:=GetMsg(myapp_port)
  80.                 IF appmsg <> 0
  81.                   IF appmsg.id = 6
  82.                      raus:=1
  83.                   ELSE
  84.                      SystemTagList(commstrarr[appmsg.id],0)
  85.                   ENDIF
  86.                   ReplyMsg(appmsg)
  87.                 ENDIF
  88.               ELSE       /*notify-message*/
  89.                 menusub() /*remove old menu*/
  90.                 menuadd() /*setup new menu*/
  91.               ENDIF
  92.             UNTIL raus <> NIL
  93.  
  94.             EndNotify(nreq)
  95.             menusub()
  96.             WHILE appmsg:=GetMsg(myapp_port) DO ReplyMsg(appmsg)  /*clear Port*/
  97.             CloseLibrary(workbenchbase)
  98.           ELSE
  99.              WriteF('No WB-Lib!\n')
  100.              CleanUp(15)
  101.           ENDIF
  102.           FreeSignal(sig)
  103.           DeleteMsgPort(myapp_port)
  104.        ELSE
  105.          WriteF('No Port!\n')
  106.          CleanUp(15)
  107.        ENDIF
  108.      ELSE
  109.        WriteF('No memory for notify!\n')
  110.        CleanUp(15)
  111.      ENDIF
  112.   ELSE
  113.     WriteF('Usage: td CF=CONFIGFILE,HELP/S\n')
  114.   ENDIF
  115. ENDPROC
  116.  
  117.  
  118.  
  119.  
  120.  
  121. PROC menuadd()
  122. DEF titlestr[60]:STRING
  123. DEF pos
  124.  
  125. FOR i:=0 TO 5 DO mymenarray[i]:=0             /*initialise*/
  126. anzahl:=0
  127.  
  128. IF fh:=Open(filename,OLDFILE)
  129.   WHILE (-1<>ReadStr(fh,lesestring)) AND (anzahl<5)
  130.     pos:=InStr(lesestring,'!',0)
  131.     IF pos <> -1
  132.       MidStr(titlestr,lesestring,0,pos)
  133.       RightStr(commstrarr[anzahl],lesestring,EstrLen(lesestring)-pos-1)
  134.       dummy:=AddAppMenuItemA(anzahl,0,titlestr,myapp_port,0)
  135.       mymenarray[anzahl]:=dummy
  136.     ENDIF
  137.     anzahl++
  138.   ENDWHILE
  139.   Close(fh)
  140. ELSE
  141.   WriteF('Can\at access CONFIGFILE!\n')
  142.   CleanUp(10)
  143. ENDIF
  144.  
  145. IF dummy:=AddAppMenuItemA(6,'Quit','Quit Td',myapp_port,0) /*setup menus*/
  146.    mymenarray[5]:=dummy
  147. ELSE
  148.   WriteF('Can\at setup menus\n')
  149.   CleanUp(15)
  150. ENDIF
  151.  
  152. ENDPROC
  153.  
  154.  
  155.  
  156.  
  157. PROC menusub()
  158.  
  159. FOR i:=0 TO 5
  160.   IF mymenarray[i] <> 0 THEN RemoveAppMenuItem(mymenarray[i])
  161. ENDFOR
  162. WHILE appmsg:=GetMsg(myapp_port) DO ReplyMsg(appmsg)
  163. ENDPROC
  164.  
  165. '$VER: Td 1.0'              /*Version*/
  166.